//接口继承类
class Student {
  sayHi() {}
}
interface Person extends Student {}

// class Children implements Person {}
let children = new Children()
console.log(children)

// interface Counter {
//   //定义多种类型
//   (start: number): string
//   interval: number
//   reset(): void
// }

// function getCounter(): Counter {
//   let counter = <Counter>function (start: number) {}
//   counter.reset = function () {}
//   return counter
// }

// let c = getCounter()
// c(10)
// c.reset()
// c.interval = 5.0

// interface Person {
//   name: string
//   age: number
// }
// interface Children {
//   canSayHi: boolean
// }
// interface Student extends Person, Children {
//   isWork: boolean
// }

// class Student implements Person {
//   name: string
//   age: number
//   // score: number
//   constructor(name: string, age: number, score: number) {
//     this.name = name
//     this.age = age
//     // this.score = score
//   }
// }

// const Student1 = new Student("jane", 19)
// interface Person {
//   name: string
//   printName(name: string): void
// }

// class Student implements Person {
//   name: string
//   constructor(name: string) {
//     this.name = name
//   }
//   printName(name: string) {
//     console.log(name)
//   }
// }

// interface NumberDictionary {
//   [index: string]: string
//   length: string // 可以，length是number类型
//   name: string // 错误，`name`的类型与索引类型返回值的类型不匹配
// }
// interface StringArray {
//   [index: number]: string
//   // [a: string]: number
// }

// let myArray: StringArray
// myArray = ["Bob", "Fred"]

// let myStr: string = myArray[0]

//函数类型
// interface PrintParam {
//   (name: string): void
// }

// let printFun: PrintParam
// printFun = function (name: string) {
//   console.log(`my name is ${name}`)
// }

// printFun("飘")

//类型断言
// let a: any = "string"
// let strLength: number = (<string>a).length

// let sLen: number = (a as string).length
//null和undefined
// let a: null = undefined
// let b: undefined = undefined
//void
// function printPerson(person: Person): void {
//   console.log("Hello, " + person.firstName + " " + person.lastName)
// }
// let d: void = 1
// let e: void = undefined
// let f: void = null
//any
// let a: any = 4
// a = "hello"

// let b: any = 4
// b.toFixed()
// let c: Object = 4
// c.toFixed()

// let arr: any[] = [1, "hello", true]
//枚举
// enum Color {
//   Red,
//   Green = 1,
//   Blue,
// }
// let c: Color = Color.Green

// let colorName: string = Color[1]

// console.log(colorName) // 显示'Green'因为上面代码里它的值是2

//元组，定义的数组项的类型可以不一致
// let x: [string, number]
// x = ["hello", 1]
// x[3] = "world"
// x[3] = true

//定义数组
// interface Status {
//   label: string
//   value: number
// }
// let statusOptions: Status[] = [
//   { label: "已过期", value: -1 },
//   { label: "生效中", value: 1 },
// ]

// let statusList: Array<Status> = [
//   { label: "已过期", value: -1 },
//   { label: "生效中", value: 1 },
// ]

// //类
// class Student {
//   fullName: string
//   //类和接口配合使用不加public为啥会报错？
//   constructor(public firstName: string, age: number, public lastName: string) {
//     this.fullName = firstName + " " + " " + lastName + "," + age + "years old"
//   }
// }

// interface Person {
//   firstName: string
//   lastName: string
// }
// function greeter(person: Person) {
//   return "Hello, " + person.firstName + " " + person.lastName
// }

// greeter({ name: "huang", lastName: "piao" })

//类型注释
// interface Person {
//   firstName: string
//   lastName: string
//   // age?: number
//   // readonly sex: number
// }

// function greeter(person: Person) {
//   return "Hello, " + person.firstName + " " + person.lastName
// }

// let user = new Student("Jane", 18, "User")

// document.body.innerHTML = greeter(user)

// class Student {
//   fullName: string
//   constructor(
//     public firstName: string,
//     public middleInitial: string,
//     public lastName: string
//   ) {
//     this.fullName = firstName + " " + middleInitial + " " + lastName
//   }
// }

// interface Person {
//   firstName: string
//   lastName: string
// }

// function greeter(person: Person) {
//   return "Hello, " + person.firstName + " " + person.lastName
// }

// let user = new Student("Jane", "M.", "User")

// document.body.innerHTML = greeter(user)
